import {
  Injectable,
  ArgumentMetadata,
  BadRequestException,
  Inject,
  PipeTransform,
} from '@nestjs/common'

//获取抽象类接口
import { FileValidator } from './file-validator'

export interface ParseFileOptions {
  validators?: FileValidator[]
}

/**
 * 文件上传管道
 */
@Injectable()
export class ParseFilePipe implements PipeTransform {
  constructor(private options: ParseFileOptions = {}) {

  }
  async transform(value: any, metadata: ArgumentMetadata) {
    if (!value) { // 上传文件为空 则抛出异常 提示没有文件
      throw new BadRequestException('文件不能为空')
    }
    if (this.options.validators) {
      for (const validator of this.options.validators) { // 依次获取每一个验证器
        // 执行验证器
        await validator.isValid(value)
      }
    }
    return value // 验证通过 返回文件
  }
}
